package com.yuandian.management.service.impl;

import com.yuandian.api.management.po.OptionParams;
import com.yuandian.api.management.vo.OptionVo;
import com.yuandian.bpm.admin.api.entity.SysDictItem;
import com.yuandian.bpm.admin.api.feign.RemoteDictService;
import com.yuandian.bpm.common.core.util.R;
import com.yuandian.constant.DictType;
import com.yuandian.management.mapper.OptionMapper;
import com.yuandian.management.service.IOptionService;
import com.yuandian.management.vo.BusinessServerResourceParams;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * 说明：选项service实现
 * @Author zfsn
 * @Date 2023/2/6 11:48
 */
@Service
@RequiredArgsConstructor
public class OptionServiceImpl implements IOptionService {

	private final OptionMapper optionMapper;

	private final RemoteDictService remoteDictService;
	/**
	 * 查询系统选项
	 * @param params 选项请求参数
	 * @return 选项集
	 */
//	@Cacheable(value = RedisNameConst.MANAGEMENT_OPTION_SYSTEM, key = "#params.isStatus")
	@Override
	public List<OptionVo> system(OptionParams params) {
		return optionMapper.system(params);
	}

	/**
	 * 查询业务选项
	 * @param params 选项请求参数
	 * @return 选项集
	 */
//	@Cacheable(value = RedisNameConst.MANAGEMENT_OPTION_BUSINESS, key = "#params.systemId + '_' + #params.isStatus")
	@Override
	public List<OptionVo> business(OptionParams params) {
		return optionMapper.business(params);
	}

	/**
	 * 查询步骤选项
	 *
	 * @param params 选项请求参数
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> step(OptionParams params) {
		return optionMapper.step(params);
	}

	/**
	 * 查询网端选项
	 *
	 * @param params 选项请求参数
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> segment(OptionParams params) {
		return optionMapper.segment(params);
	}

	/**
	 * 告警配置管理-告警模板配置-模板类型
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> templateType() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.CONF_ALARM_TEMPLATE_TYPE);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 告警配置管理-告警模板配置-指标单位
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> indicatorsType() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.INDICATORS_TYPE);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 告警配置管理-告警模板配置-告警对象
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> indicatorsObject() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.CONF_ALARM_INDICATOR_OBJ_TYPE);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 告警配置管理-告警模板配置-颗粒度
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> indicatorsParticle() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.CONF_ALARM_PARTICLE_TYPE);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 告警级别
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> alarmLevel() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.CONF_ALARM_LEVEL);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 告警模板
	 *
	 * @return 统一响应
	 */
	@Override
	public List<Map<String, Object>> alarmTemplate(Integer type) {
		return optionMapper.alarmTemplate(type);
	}

	/**
	 * 告警指标
	 *
	 * @return 统一响应
	 * @param type
	 * @param category
	 */
	@Override
	public List<OptionVo> alarmIndicators(Integer type, String category) {
		return optionMapper.alarmIndicators(type, category);
	}

	/**
	 * 查询菜单映射关系
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> getButtonMap() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.BUTTON_MAP);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 查询城市地市(区域)
	 *
	 * @return 统一响应
	 * @param provinceCode
	 */
	@Override
	public List<OptionVo> getCityArea(String provinceCode) {
		return optionMapper.getCityArea(provinceCode);
	}

	/**
	 * 查询省份
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> province() {
		return optionMapper.province();
	}

	/**
	 *	查询告警类型
	 * @return 统一响应
	 * @param category
	 */
	@Override
	public List<OptionVo> queryBaseIndicatorsList(OptionParams category) {
		return optionMapper.queryBaseIndicatorsList(category);
	}

	/**
	 * 数据中心
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> dataCenter() {
		return optionMapper.dataCenter();
	}

	/**
	 * 数据中心下的地市
	 *
	 * @param dataCenterId
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> getCityAreaByDataCenterId(Integer dataCenterId) {
		return optionMapper.getCityAreaByDataCenterId(dataCenterId);
	}

	/**
	 * 查询系统所属的域
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> getSystemDomain() {
		List<OptionVo> optionVos = new ArrayList<>();
		R<List<SysDictItem>> sysDictItems = remoteDictService.getDictByType(DictType.SYSTEM_DOMAIN);
		for (SysDictItem sysDictItem : sysDictItems.getData()) {
			OptionVo optionVo = new OptionVo();
			optionVo.setLabel(sysDictItem.getLabel());
			optionVo.setValue(sysDictItem.getItemValue());
			optionVos.add(optionVo);
		}
		return optionVos;
	}

	/**
	 * 原始数据规则名称
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> queryRuleNameSelect() {
		return optionMapper.queryRuleNameSelect();
	}

	/**
	 * 获取协议名称
	 *
	 * @return
	 */
	@Override
	public List<OptionVo> protocol() {
		return optionMapper.protocol();
	}

	/**
	 * 指标单位
	 *
	 * @return 统一响应
	 */
	@Override
	public List<OptionVo> indicatorUnit() {
		return optionMapper.indicatorUnit();
	}

	/**
	 * 通过系统id查询端类型
	 *
	 * @param systemId
	 */
	@Override
	public List<OptionVo> getSegmentTypeNameBySegmentId(Integer systemId) {
		return optionMapper.getSegmentTypeNameBySegmentId(systemId);
	}





	/**
	 * 查询专属指标同步网端下拉项
	 * @param params 业务服务资源接口请求对象
	 * @return 通用返回对象
	 */
	@Override
	public R queryIndicatorSyncSegmentOptions(BusinessServerResourceParams params) {
		return R.ok(optionMapper.queryIndicatorSyncSegmentOptions(params));
	}

	/**
	 * 查询专属指标同步系统下拉项
	 * @param params 业务服务资源接口请求对象
	 * @return 通用返回对象
	 */
	@Override
	public R queryIndicatorSyncSystemOptions(BusinessServerResourceParams params) {
		return R.ok(optionMapper.queryIndicatorSyncSystemOptions(params));
	}

	/**
	 * 查询专属指标同步业务下拉项
	 * @param params 业务服务资源接口请求对象
	 * @return 通用返回对象
	 */
	@Override
	public R queryIndicatorSyncBusinessOptions(BusinessServerResourceParams params) {
		return R.ok(optionMapper.queryIndicatorSyncBusinessOptions(params));
	}

}
